Method Area, Heap, এবং Stack এর কাজ

Java Technologies - জাভা ভার্চুয়াল মেশিন (Java Virtual Machine) - JVM এর Runtime Data Area
252

Java Virtual Machine (JVM) প্রোগ্রাম চালানোর জন্য একটি নির্দিষ্ট মেমরি আর্কিটেকচার ব্যবহার করে। JVM এর মেমরি তিনটি প্রধান অংশে বিভক্ত: Method Area, Heap, এবং Stack। এই তিনটি মেমরি অংশের কাজ আলাদা এবং প্রোগ্রাম রান করার জন্য প্রতিটি অঞ্চলের বিশেষ ভূমিকা রয়েছে।

নিচে এই তিনটি মেমরি অংশের কাজ এবং তাদের মধ্যে পার্থক্য আলোচনা করা হল।

1. Method Area

Method Area হল JVM মেমরির একটি অংশ যা ক্লাসের মেটাডেটা, method code, constant pool, এবং static variables সংরক্ষণ করে। এটি একটি shared memory area হিসেবে কাজ করে, যার মানে হচ্ছে এটি JVM এর সমস্ত থ্রেড দ্বারা ভাগ করা হয়।

Method Area এর কাজ:

  1. Class Metadata:
    • Method Area ক্লাসের মেটাডেটা ধারণ করে, যেমন ক্লাসের নাম, ফিল্ড, মেথড, সুপারক্লাস এবং ইনটারফেস। এটি সেই তথ্য সংরক্ষণ করে যা জাভা ক্লাসগুলির বর্ণনা প্রদান করে।
  2. Method Code:
    • এই অংশে ক্লাসের সমস্ত মেথডের বাইটকোড (bytecode) রাখা হয়। যখন JVM কোন মেথড কল করে, তখন ওই মেথডের বাইটকোড এই অংশ থেকে লোড করা হয় এবং এক্সিকিউট করা হয়।
  3. Constant Pool:
    • এটি ক্লাসের মধ্যে ব্যবহৃত constants, strings, এবং literal values (যেমন integer, float, string values) ধারণ করে।
  4. Static Variables:
    • Static ভেরিয়েবলগুলি Method Area তে রাখা হয়, কারণ এগুলি সমস্ত ক্লাসের জন্য একক এবং এগুলি প্রোগ্রামের লোডিংয়ের সময় মেমরিতে থাকবে।

Method Area এর গুরুত্বপূর্ণ পয়েন্ট:

  • এটি shared memory হিসেবে কাজ করে, যা JVM এর সমস্ত থ্রেড দ্বারা ব্যবহার হয়।
  • ক্লাস লোডিংয়ের সময় Method Area তে ক্লাসের মেটাডেটা লোড করা হয়।
  • এটি মেমরি লিক (memory leak) সৃষ্টি করতে পারে যদি static ভেরিয়েবল সঠিকভাবে ব্যবস্থাপনা না করা হয়।

2. Heap

Heap হল JVM এর একটি মেমরি অঞ্চল যেখানে সমস্ত objects এবং arrays তৈরি হয়। এটি dynamic memory হিসেবে ব্যবহৃত হয়, এবং যখন Java প্রোগ্রামে নতুন অবজেক্ট বা অ্যারে তৈরি করা হয়, তখন সেটি heap-এ রাখা হয়।

Heap এর কাজ:

  1. Object Storage:
    • যখন একটি নতুন অবজেক্ট তৈরি করা হয় (যেমন: new MyObject()), তখন এটি heap মেমরিতে সঞ্চিত হয়। এটি ক্লাসের instance বা অবজেক্টের জন্য প্রয়োজনীয় মেমরি বরাদ্দ করে।
  2. Garbage Collection:
    • Heap মেমরিতে বসবাসকারী অবজেক্টগুলো সময় সময় Garbage Collector দ্বারা পরিষ্কার করা হয়। যখন কোনো অবজেক্টের আর কোনো রেফারেন্স থাকে না (অর্থাৎ, সে অবজেক্টটি আর ব্যবহৃত হচ্ছে না), তখন Garbage Collector ওই অবজেক্টটিকে মুছে ফেলে এবং মেমরি মুক্ত করে।
  3. Large Memory Area:
    • Heap সাধারণত Java প্রোগ্রামে ব্যবহৃত বৃহত্তম মেমরি অংশ। এটি বিভিন্ন ক্লাসের অবজেক্টগুলিকে ধারণ করতে পারে, যেমন স্ট্রিং, লিস্ট, ম্যাপ, ইত্যাদি।

Heap এর গুরুত্বপূর্ণ পয়েন্ট:

  • এটি dynamic memory হিসেবে কাজ করে, যেখানে runtime-এ অবজেক্ট তৈরি করা হয়।
  • Garbage Collection heap মেমরি ব্যবস্থাপনা করে, যা অব্যবহৃত অবজেক্ট মুছে ফেলে এবং মেমরি মুক্ত করে।
  • Heap মেমরি ব্যবহৃত হয়ে গেলে, OutOfMemoryError ঘটতে পারে।

3. Stack

Stack JVM এর একটি মেমরি অঞ্চল যেখানে প্রতিটি থ্রেডের method calls, local variables, এবং method execution সম্পর্কিত ডেটা সংরক্ষণ করা হয়। এটি একটি LIFO (Last In First Out) স্ট্যাক কাঠামো অনুসরণ করে, যার মানে হলো শেষ যে মেথডটি কল হয়েছে সেটি প্রথমে সম্পন্ন হবে।

Stack এর কাজ:

  1. Method Call Stack:
    • যখন একটি মেথড কল করা হয়, তখন সেই মেথডের জন্য একটি stack frame তৈরি হয়, যেখানে মেথডের local variables, parameters, এবং return address সংরক্ষিত থাকে।
  2. Local Variables:
    • মেথডের মধ্যে ডিফাইন করা সমস্ত local variables (যেমন প্যারামিটার, ইনস্ট্যান্ট ভেরিয়েবল) stack এ রাখা হয়। প্রতিটি মেথড কলের জন্য একটি আলাদা stack frame তৈরি হয়।
  3. Method Execution:
    • যখন একটি মেথড এক্সিকিউট হয়, তখন তার সমস্ত ইনস্ট্রাকশন এবং লোকাল ভেরিয়েবল stack তে রাখা হয় এবং মেথড শেষ হলে সেই stack frame পপ হয়ে যায়।
  4. Stack Overflow:
    • যদি কোনো মেথড খুব বেশি গভীরভাবে কল হয় (যেমন একটি ইনফিনিট রিকার্সিভ কল), তাহলে stack overflow হতে পারে, যা StackOverflowError এর মাধ্যমে প্রকাশ পায়।

Stack এর গুরুত্বপূর্ণ পয়েন্ট:

  • এটি last-in, first-out (LIFO) কাঠামো অনুসরণ করে, যেখানে শেষ কল করা মেথড প্রথমে সম্পন্ন হবে।
  • Local variables এবং method calls stack এ সঞ্চিত থাকে।
  • এটি thread-specific মেমরি অংশ, অর্থাৎ, প্রতিটি থ্রেডের নিজস্ব stack থাকে।

Method Area, Heap, এবং Stack এর মধ্যে পার্থক্য:

Memory AreaPurposeScopeManaged By
Method AreaStores class-level data, method code, static variables, constant pool.Shared across threadsJVM (Class Loader)
HeapStores all objects and arrays dynamically created during execution.Shared across threadsGarbage Collector
StackStores method calls, local variables, and method execution context.Thread-specificJVM (Thread management)
  • Method Area, Heap, এবং Stack JVM এর প্রধান মেমরি অংশ, এবং প্রতিটি অংশের কাজ আলাদা।
  • Method Area ক্লাসের মেটাডেটা এবং স্ট্যাটিক ডেটা ধারণ করে, Heap ডাইনামিক অবজেক্ট এবং অ্যারে ধারণ করে এবং Stack প্রতিটি থ্রেডের মেথড কল, লোকাল ভেরিয়েবলস এবং মেথড এক্সিকিউশন ট্র্যাক করে।
  • JVM এই তিনটি অংশের মধ্যে মেমরি ম্যানেজমেন্ট করে, এবং garbage collection প্রক্রিয়ার মাধ্যমে অব্যবহৃত অবজেক্টগুলো পরিষ্কার করে।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...